package Pojo;

import java.util.List;

/** Classe Turma
 * Classe que representa uma dada turma de uma disciplina lecionada por um professor. 
 * A turma está relacionada com Professor, Alunos e Disciplina.
 * @author Maione José
 *
 */
public class Turma {
	/** Código da Turma*/
	private int idTurma;
	
	/** Ano da Turma*/
	private int ano;
	
	/** Período da Turma*/
	private int periodo;
	
	/** Local da Turma*/
	private String local;
	
	/** Horário da Turma*/
	private String horario;
	
	/** Número de Vagas da Turma*/
	private int numeroDeVagas;
	
	/** Verificação se uma turma já foi finalizada ou não*/
	private boolean finalizada;
	
	/** Professor que leciona Turma*/
	private Professor professor;
	
	/** Disciplina oferecida na Turma*/
	private Disciplina disciplina;
	
	/** Lista de Históricos Turma*/
	private List<HistoricoTurma> historicoturmas;
	
	/** Lista de Atividades da Turma lançadas pelo professor*/
	private List<Atividade> atividades;
	
	/**
	 * Construtor da Turma sem relacionamentos
	 * @param idTurma
	 * @param ano
	 * @param periodo
	 * @param local
	 * @param horario
	 * @param numeroDeVagas
	 * @param finalizada
	 */
	public Turma(int idTurma, int ano, int periodo, String local, String horario, int numeroDeVagas,boolean finalizada){
		this.setIdTurma(idTurma);
		this.setAno(ano);
		this.setPeriodo(periodo);
		this.setLocal(local);
		this.setHorario(horario);
		this.setNumeroDeVagas(numeroDeVagas);
		this.setFinalizada(finalizada);
	}
	
	/**
	 * Construtor da Turma com relacionamentos
	 * @param idTurma
	 * @param ano
	 * @param periodo
	 * @param local
	 * @param horario
	 * @param numeroDeVagas
	 * @param finalizada
	 * @param professor
	 * @param disciplina
	 * @param listaAtividades
	 * @param listaHistoricoTurmas
	 */
	public Turma(int idTurma,int ano, int periodo, String local, String horario, int numeroDeVagas, boolean finalizada, Professor professor, Disciplina disciplina, List<Atividade> listaAtividades,List<HistoricoTurma> listaHistoricoTurmas){
		this(idTurma,ano,periodo,local,horario,numeroDeVagas,finalizada);
		this.setProfessor(professor);
		this.setDisciplina(disciplina);
		this.atividades = listaAtividades;
		this.historicoturmas= listaHistoricoTurmas;
	}

	/**
	 * Getter do idTurma
	 * @return Código da Turma
	 */
	public int getIdTurma() {
		return idTurma;
	}

	/**
	 * Setter do idTurma
	 * @param idTurma
	 */
	private void setIdTurma(int idTurma) {
		this.idTurma = idTurma;
	}

	/**
	 * Getter do Ano
	 * @return Ano de oferecimento da Turma
	 */
	public int getAno() {
		return ano;
	}

	/**
	 * Setter do Ano
	 * @param ano
	 */
	private void setAno(int ano) {
		this.ano = ano;
	}
	
	/**
	 * Getter do Período
	 * @return Período no qual a Turma é oferecida
	 */
	public int getPeriodo() {
		return periodo;
	}

	/**
	 * Setter do Período
	 * @param periodo
	 */
	private void setPeriodo(int periodo) {
		this.periodo = periodo;
	}

	/**
	 * Getter do Local da Turma
	 * @return Local onde a turma é oferecida
	 */
	public String getLocal() {
		return local;
	}

	/**
	 * Setter do Local
	 * @param local
	 */
	private void setLocal(String local) {
		this.local = local;
	}

	/**
	 * Getter do Horário
	 * @return Horário da Turma
	 */
	public String getHorario() {
		return horario;
	}

	/**
	 * Setter do Horário
	 * @param horario
	 */
	private void setHorario(String horario) {
		this.horario = horario;
	}

	/**
	 * Getter do Número de Vagas
	 * @return Número de vagas disponíveis para a Turma 
	 */
	public int getNumeroDeVagas() {
		return numeroDeVagas;
	}

	/**
	 * Setter do Número de Vagas
	 * @param numeroDeVagas
	 */
	private void setNumeroDeVagas(int numeroDeVagas) {
		this.numeroDeVagas = numeroDeVagas;
	}
	
	/**
	 * Getter do atributo Finalizada que verifica se a turma já foi finalizada ou não
	 * @return Valor booleano indicando a finalização ou não da turma. 
	 */
	public boolean getFinalizada(){
		return(this.finalizada);
	}
	
	/**
	 * Setter do atributo Finalizada que verifica se a turma já foi finalizada ou não
	 * @param finalizada
	 */
	public void setFinalizada(boolean finalizada){
		this.finalizada = finalizada;
	}
		
	/**
	 * Getter do Professor
	 * @return Professor da Turma
	 */
	public Professor getProfessor() {
		return professor;
	}

	/**
	 * Setter do Professor
	 * @param professor
	 */
	private void setProfessor(Professor professor) {
		this.professor = professor;
	}

	/**
	 * Getter da Disciplina da Turma
	 * @return Disciplina referente aquela turma
	 */
	public Disciplina getDisciplina() {
		return disciplina;
	}

	/**
	 * Setter da Disciplina
	 * @param disciplina
	 */
	private void setDisciplina(Disciplina disciplina) {
		this.disciplina = disciplina;
	}
	
	/**
	 * Sobrescrita do método toString
	 */
	@Override
	public String toString(){
		return(this.getIdTurma()+"\t"+this.getAno()+"\t"+this.getPeriodo()+"\t"+this.getLocal()+"\t"+this.getHorario()+"\t"+this.getNumeroDeVagas()+"\t"+this.getFinalizada()+"\t"+this.getProfessor().getIdProfessor()+"\t"+getDisciplina().getIdDisciplina()+"\n");
	}
}